// 配置路由的地方

import Vue from 'vue'
import VueRouter from 'vue-router'
import routes from './routes'
import store from '@/store'

// 使用插件
Vue.use(VueRouter)

// 备份VueRouter原型对象中的push&&replace
let originPush = VueRouter.prototype.push
let originReplace = VueRouter.prototype.replace

// 重写push|replace
VueRouter.prototype.push = function(location,resolve,reject){
    if(resolve && reject){
        originPush.call(this,location,resolve,reject);
    }else{
        originPush.call(this,location,()=>{},()=>{})
    }
}

VueRouter.prototype.replace = function(location,resolve,reject){
    if(resolve && reject){
        originReplace.call(this,location,resolve,reject);
    }else{
        originReplace.call(this,location,()=>{},()=>{})
    }
}

// 配置路由
let router = new VueRouter({
    // 配置路由
    routes,
    scrollBehavior(to, from, savedPosition) {
        // 跳转时使滚动条跳到顶部
        return { y: 0 }
    },
})

// 全局前置守卫
router.beforeEach(async (to,from,next)=>{
    // to 获取到要跳转到的路由的信息
    // from 获取到从哪个路由来的的信息
    // next 放行函数
    next()
    // 有token就一定登录了
    let token = store.state.user.token
    let name = store.state.user.userInfo.name
    if(token){
        //用户已经登录了还想去登录页码,使它停留在首页
        if(to.path == '/login'){
            next('/home')
        } else {
            // 登录了，但是不是去login
            // 如果有用户名
            if(name){
                next()
            }else{
                // 没有用户信息，派发action让仓库存储用户数据
                try {
                    // 获取用户信息成功
                    await store.dispatch('getUserInfo')   
                    next()
                } catch (error) {
                    // token失效，获取不到用户信息
                    // 1.清楚token，重新获取
                    store.dispatch('userLoginOut')
                    next('/login')
                }
            }
        }
    } else {
        // 未登录:不能进入交易，支付相关的页面已经个人中心
        let toPath = to.path
        if(toPath.indexOf('/trade')!=-1 || toPath.indexOf('/pay')!=-1 || toPath.indexOf('/center')!=-1){
            // 把未登录的时候想去而没有去成的信息，存储与地址栏中
            next('/login?redirect='+toPath)
        }else{
            next()
        }
    }
})

export default router